package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import bean.empresaBean;

public class empresaDao {
	
	public void inserir(Connection conn, empresaBean empresa) throws SQLException{
		String sql = "insert into empresa(nome, cnpj, cidade) values(?,?,?)";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, empresa.getNome());
		ps.setString(2, empresa.getCnpj());
		ps.setString(3, empresa.getCidade());
		
		ps.execute();
		ps.close();
	}
	
	public void alterarCadastro(Connection conn, empresaBean empresa) throws SQLException {
		String sql = "update empresa set nome = ?, cnpj = ?, cidade = ? where id = ?";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, empresa.getNome());
		ps.setString(2, empresa.getCnpj());
		ps.setString(3, empresa.getCidade());
		ps.setInt(4, empresa.getId());
		
		ps.execute();
		ps.close();
	}	
	
	public void alterar(Connection conn, empresaBean empresa) throws SQLException {
		String sql = "update empresa set " +
						"nome = ?, " +
						"subtitulo = ?, " +
						"endereco = ?, " +
						"cidade = ?, " +
						"uf = ?, " +
						"telefone = ? " +
						"where id = ?";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, empresa.getNome());
		ps.setString(2, empresa.getSubtitulo());
		ps.setString(3, empresa.getEndereco());
		ps.setString(4, empresa.getCidade());
		ps.setString(5, empresa.getUf());
		ps.setString(6, empresa.getTelefone());
		ps.setInt(7, empresa.getId());
		
		ps.execute();
		ps.close();
	}
	
	public void alterarLogo(Connection conn, empresaBean empresa) throws SQLException {
		
		String sql = "update empresa set logo = ? where id = ?";

		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setBytes(1, empresa.getLogo());
		ps.setInt(2, empresa.getId());
		
		ps.execute();
		ps.close();
		
	}
	
	public empresaBean getEmpresa(Connection conn, Integer id) throws SQLException {
		
		String sql = "select * from empresa where id = ?";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, id);
		
		ResultSet rs = ps.executeQuery();
		
		empresaBean empresa = new empresaBean();
		if (rs.next()){
			empresa.setNome(rs.getString("nome"));
			empresa.setSubtitulo(rs.getString("subtitulo"));
			empresa.setEndereco(rs.getString("endereco"));
			empresa.setCidade(rs.getString("cidade"));
			empresa.setUf(rs.getString("uf"));
			empresa.setTelefone(rs.getString("telefone"));
			empresa.setLogo(rs.getBytes("logo"));
		}
		ps.close();
		rs.close();
		return empresa;
	}
	
	public empresaBean getEmpresa(Connection conn, String cnpj) throws SQLException {
		
		String sql = "select * from empresa where cnpj = ?";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, cnpj);
		
		ResultSet rs = ps.executeQuery();
		
		empresaBean empresa = new empresaBean();
		if (rs.next()){
			empresa.setId(rs.getInt("id"));
			empresa.setNome(rs.getString("nome"));
			empresa.setSubtitulo(rs.getString("subtitulo"));
			empresa.setEndereco(rs.getString("endereco"));
			empresa.setCidade(rs.getString("cidade"));
			empresa.setUf(rs.getString("uf"));
			empresa.setTelefone(rs.getString("telefone"));
			empresa.setLogo(rs.getBytes("logo"));
		}
		ps.close();
		rs.close();
		return empresa;
	}
	
	public empresaBean getMin(Connection conn) throws SQLException {
		
		String sql = "select min(id) as id from empresa where excluido = '0'";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		
		empresaBean empresa = new empresaBean();
		if(rs.next()){
			empresa.setId(rs.getInt("id"));
		}
		ps.close();
		rs.close();
		
		return empresa;
	}	
	
	public ArrayList<empresaBean> getAll(Connection conn) throws SQLException {
		
		String sql = "select * from empresa order by id";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		
		ResultSet rs = ps.executeQuery();
		
		ArrayList<empresaBean> empresas = new ArrayList<empresaBean>();
		while(rs.next()){
			empresaBean empresa = new empresaBean();
			empresa.setId(rs.getInt("id"));
			empresa.setNome(rs.getString("nome"));
			empresa.setCnpj(rs.getString("cnpj"));
			empresa.setSubtitulo(rs.getString("subtitulo"));
			empresa.setEndereco(rs.getString("endereco"));
			empresa.setCidade(rs.getString("cidade"));
			empresa.setUf(rs.getString("uf"));
			empresa.setTelefone(rs.getString("telefone"));
			empresa.setLogo(rs.getBytes("logo"));
			empresa.setExcluido(rs.getInt("excluido"));
			
			empresas.add(empresa);
		}
		ps.close();
		rs.close();
		return empresas;
		
	}
	
	public ArrayList<empresaBean> getList(Connection conn) throws SQLException {
		
		String sql = "select * from empresa where excluido = '0'";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		
		ResultSet rs = ps.executeQuery();
		
		ArrayList<empresaBean> empresas = new ArrayList<empresaBean>();
		while(rs.next()){
			empresaBean empresa = new empresaBean();
			empresa.setId(rs.getInt("id"));
			empresa.setNome(rs.getString("nome"));
			empresa.setCnpj(rs.getString("cnpj"));
			empresa.setSubtitulo(rs.getString("subtitulo"));
			empresa.setEndereco(rs.getString("endereco"));
			empresa.setCidade(rs.getString("cidade"));
			empresa.setUf(rs.getString("uf"));
			empresa.setTelefone(rs.getString("telefone"));
			empresa.setLogo(rs.getBytes("logo"));
			
			empresas.add(empresa);
		}
		ps.close();
		rs.close();
		return empresas;
		
	}
	
	public void excluir(Connection conn, Integer id) throws SQLException{
		
		String sql = "delete from empresa where id = ?";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, id);
		
		ps.execute();
		ps.close();
	}
	
	public void exclucaoLogica(Connection conn, Integer id) throws SQLException {
		
		String sql = "update empresa set excluido = '1' where id = ?";
		
		PreparedStatement ps;
	
		ps = conn.prepareStatement(sql);
		ps.setInt(1, id);
		ps.execute();
		ps.close();
		
	}
	
	public void ativar(Connection conn, Integer id) throws SQLException {
		
		String sql = "update empresa set excluido = '0' where id = ?";
		
		PreparedStatement ps;
	
		ps = conn.prepareStatement(sql);
		ps.setInt(1, id);
		ps.execute();
		ps.close();
		
	}

	public boolean cnpjCadastrado(Connection conn, empresaBean empresa) throws SQLException {
		
		String sql = "select cnpj from empresa where cnpj = ?";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setString(1, empresa.getCnpj());
		
		ResultSet rs = ps.executeQuery();
		
		if(rs.next()){
			return true;
		}
		
		ps.close();
		rs.close();
		
		return false;
	}

	public boolean isAtivo(Connection conn, Integer idEmpresa) throws SQLException {
		
		String sql = "select excluido from empresa where id = ?";
		
		PreparedStatement ps = conn.prepareStatement(sql);
		ps.setInt(1, idEmpresa);
		
		ResultSet rs = ps.executeQuery();
		if(rs.next()){
			if(rs.getInt("excluido") == 0){
				return true;
			}else{
				return false;
			}
		}
		return false;
	}

}
